package model

import business.Destoryable
import business.Enhanceable
import business.Moveable
import business.Reinforceable
import enums.Direction
import enums.EnhanceType
import ext.checkCollision
import org.itheima.kotlin.game.core.Painter
import java.util.*

/**
 * 强化物
 *
 * 具有强化坦克的能力
 * 具有阻塞运动的能力
 * 具有销毁的能力
 * */
class Enhance() :Enhanceable,Destoryable {
    override var x: Int=0
    override var y: Int=0
    override val width: Int=GameConfig.SMALL_BLOCK_WIDTH
    override val height: Int=GameConfig.SMALL_BLOCK_WIDTH

    var showTime:Long =0 //显示的时间

    override var type: EnhanceType=EnhanceType.TIMING
    var isDestoryed:Boolean=false

    init{
        showTime=System.currentTimeMillis()

        var i=Random().nextInt(3)
        when(i){
            0-> type=EnhanceType.TIMING
            1-> type=EnhanceType.BLAST
            2-> type=EnhanceType.UPGRADE
        }

        x=(Math.random()*(GameConfig.WINDOW_WIDTH-width)).toInt()
        y=(Math.random()*(GameConfig.WINDOW_HEIGHT-height)).toInt()
    }

    override fun draw() {
        var imagePath=when(type){
            EnhanceType.TIMING->"img/timer.gif"
            EnhanceType.BLAST->"img/bomb.gif"
            EnhanceType.UPGRADE->"img/star.gif"
        }

        Painter.drawImage(imagePath,x,y)
    }

    override fun isDestory(): Boolean {
        if(System.currentTimeMillis()-showTime>15*1000){
            isDestoryed=true
        }
        return isDestoryed
    }

    override fun enhance(reinforce: Reinforceable) {
        isDestoryed=true
    }

    override fun isEnhance(reinforce: Reinforceable): Boolean {
        var view01=this
        var view02=reinforce
        var x01=view01.x
        var y01=view01.y
        var width01=view01.width
        var height01=view01.height
        var x02=view02.x
        var y02=view02.y
        var width02=view02.width
        var height02=view02.height

        //两个物体的x,y,w,h的比较
        return when {
            y02 + height02 <= y01 -> //如果 阻挡物 在运动物的上方时 ，不碰撞
                false
            y01 + height01 <= y02 -> //如果 阻挡物 在运动物的下方时 ，不碰撞
                false
            x02 + width02 <= x01 -> //如果 阻挡物 在运动物的左方时 ，不碰撞
                false
            else -> x01 + width01 > x02
        }
    }
}